Traditionally, Internet searches are conducted by an average user by inputting various terms or keywords, referred to as a search query, in a search field associated with a search engine. After submitting the search query, the search engine may generate results comprising data or network addresses tailored to the search query. With the popularity of the Internet, search engines now generate thousands to hundreds of thousands of search results by searching large numbers of documents, the majority of which may not apply to the subject matter of the search. These search results are typically organized according to relevancy, popularity, etc. Navigating the vast amounts of search results is time consuming for an average user and a percentage of false positives returned in the search results is high. Further, conventional search engines use a process referred to as “sharding” or “horizontal partitioning” of databases. Most, if not all, large search engines implement horizontal partitioning or sharding of what is mostly a single search index. When horizontal partitioning is used, all servers in the cluster are called upon to process a piece of the overall search index (database). Problems with horizontal partitioning can arise, for instance, as accurately searching large amounts of unstructured data is difficult as complexity grows and the amount of data grows. Horizontal partitioning is extremely resource intensive and often results in performance “hotspots.” Hotspots occur when certain nodes of memory (shards) are over-used. Conversely, this leaves other shards of memory under-used. For instance, by having to search a large search index spread across many databases (as horizontal partitioning requires), bottlenecks can be created as the search is limited to the slowest node, or server, taking part in the search.